Application Load BalancerのリスナールールによるIP制限
管理ページなど特定のURLパスだけIP制限したいケースがありますが、セキュリティグループやNetwork ACLでは対応できません。Application Load BalancerのリスナールールによるIP制限をご紹介します。
admin以下をIP制限
以下はEC2のドキュメントルート配下です。特定のIPアドレスからのみ、/admin/restrict-ip.html
に接続可能にします。特定のIP以外からの接続の場合は、ALBのカスタムレスポンスでHTTP 403を返します。トップにはどこからでも閲覧できるindex.html
を配置します。
$ tree . . ├── admin │ └── restrict-ip.html └── index.html 1 directory, 2 files $
ALBリスナールールによるIP制限
リスナールールの送信元IPとパスを組み合わせます。
特定のIPアドレスから/admin以下に接続した場合は、ターゲットグループにルーティングします。ターゲットグループにEC2を登録しておくことで、/admin/restrict-ip.html
にアクセスできます。
/admin以下に指定したIPアドレス以外から接続があった場合は、ALBの固定レスポンスを返します。送信元IPに0.0.0.0/0を指定します。今回は「このページには特定のIPアドレスからしか接続できません」と返します。ステータスコードは403です。
デフォルトのルーティングは、ターゲットグループにします。こちらが適用されることで、トップのindex.htmlは誰にでも見える状態になります。
まとめると以下のようになります。
動作確認
許可されたIPアドレスから接続すると、restrict-ip.htmlの内容を確認できます。
$ curl -LI http://elb-dnsname/admin/restrict-ip.html -o /dev/null -w '%{http_code}\n' -s 200 $ curl http://elb-dnsname/admin/restrict-ip.html <h1>管理者のIPアドレスにしか見えないページ</h1> $
許可されていないIPアドレスから接続すると、ALBの固定レスポンスが表示されます。
$ curl -LI http://elb-dnsname/admin/restrict-ip.html -o /dev/null -w '%{http_code}\n' -s 403 $ curl http://elb-dnsname/admin/restrict-ip.html <h1>このページには特定のIPアドレスからしか接続できません</h1> $
最後に
Application Load BalancerのリスナールールによるIP制限をご紹介しました。特定のIPアドレスからの接続はターゲットグループにルーティングし、それ以外はALBの固定レスポンスを返す形にしました。特定パスのIPアドレス制限はAWS WAFでも可能です。AWS WAFと比較するとAWS WAFの料金が不要である点や、固定レスポンスを利用できる点で優れています。制限したいIPアドレスが多い場合はAWS WAFが適しているかと思います。